local tab1 = { a = "aa", b = "bb",  "cc" ,'ee'}
tab1['d'] = 'ddd'	-- 使用字符串作为索引赋值
tab1.f = 'fff'		-- 使用.+字母作为索引赋值

tab1['5'] = 2
tab1[4] = "444"
tab1[5] = 4

assert(#tab1 == 2) 	-- 现在tab1作为列表，其中有2个元素，'cc','ee'
assert(tab1.d == 'ddd')  	-- 索引为字母开头的变量可以使用两种写法，例如 tab1.d 和 tab1['d']
assert(tab1["f"] == 'fff')
assert(tab1[5] ~= tab1['5'])	-- 两个不同的元素，一个序号是数字，一个序号是字符串。


-- 遍历所有元素，包括索引为数字或字符串
for k, v in pairs(tab1) do
    print(k .. " - " .. v)
end 

print()
 
tab1.b = nil --相当于删除这个key
assert(tab1.a == 'aa')
assert(tab1["a"] == 'aa')

-- 仅迭代数字索引的元素  到第一个nil结束
for v,k in ipairs(tab1) do 
	print(v,":",k)
end
print()

-------
-------
-------

tableA = {1,2,3}
tableB = {1,2,3}

assert(tableA ~= tableB) -- 不同的table，根本就不比内部的东西。
assert(tableA[1] == tableB[1]) -- 但是两个不同表的具体值是相等的。

local nums = {}
table.insert (nums,'1')
table.insert (nums,'2')
table.insert (nums,'3')

assert(nums[#nums] == '3',nums[#nums-1] == '2')

nums.name = 'haha'
local num2 = nums  -- 增加一个指针。
num2.name = 'woqu'
assert(num2.name == nums.name) -- 断言 nums 和 num2 指向同一个对象
num2[1] = 100
assert(nums[1] == 100)

assert(#nums == 3)  -- 用.添加的是字段，计算数组长度时不包含这些字段
nums[4] = nil
nums[5] = nil
nums[6] = 'haha'
assert(#nums == 3) 
-- 计算数组长度时间 遇到第一个nil值停止，得出数组的长度。但如果下一个值不为nil的话，可能为加上后面的个数。





